#include <stdio.h>

//这些函数类型都是相同的（返回值类型相同，参数类型相同）
int add(int a,int b)
{
    return a+b;
}

int minus(int a,int b)
{
    return a-b;
}

int multiply(int a,int b)
{
    return a*b;
}

int divide(int a,int b)
{
    return a/b;
}

//开闭原则：尽量不要去修改原有代码，要对代码功能进行扩展

//回调函数(callback)：将函数指针传给另一个函数作为参数;
int caculate(int a,int b,int (*funPtr)(int,int))
{
    return funPtr(a,b);
}

// int caculate(int a, int b, char c)
// {
//     switch ((c))
//     {
//     case '+':return add(a,b);
//     case '-':return minus(a,b);
//     case '*':return multiply(a,b);
//     case '/':return divide(a,b);
//     default:
//        return -1;
//     }
// }



int main()
{
    //printf("%d\n",caculate(2,3,'+'));
    printf("%d\n",caculate(2,3,add));
    return 0;
}